#!/usr/bin/env python3
"""
配置验证脚本 - 用于验证配置文件是否正确
"""

import os
import sys
from pathlib import Path

def validate_config():
    """验证配置文件"""
    
    print("=== 配置验证脚本 ===")
    
    # 检查配置文件是否存在
    config_file = "config.py"
    if not os.path.exists(config_file):
        print(f"❌ 配置文件 {config_file} 不存在")
        print("请运行: cp config.example.py config.py")
        return False
    
    print(f"✅ 配置文件 {config_file} 存在")
    
    # 尝试导入配置
    try:
        import config
        print("✅ 配置文件语法正确")
    except Exception as e:
        print(f"❌ 配置文件语法错误: {e}")
        return False
    
    # 验证必要的配置项
    required_configs = [
        'OUTPUT_DIR',
        'LOG_FILE', 
        'GITHUB_URL',
        'BASE_URL',
        'MAX_RETRIES',
        'REQUEST_TIMEOUT',
        'PRIORITY_GITHUB_PARSE',
        'SUBSCRIPTION_COUNT',
        'USER_AGENT',
        'LOG_LEVEL',
        'LOG_FORMAT'
    ]
    
    missing_configs = []
    for config_name in required_configs:
        if not hasattr(sys.modules['config'], config_name):
            missing_configs.append(config_name)
    
    if missing_configs:
        print(f"❌ 缺少必要的配置项: {', '.join(missing_configs)}")
        return False
    
    print("✅ 所有必要的配置项都存在")
    
    # 验证配置值
    print("\n=== 配置值验证 ===")
    
    # 验证输出目录
    output_dir = Path(os.path.expanduser(config.OUTPUT_DIR))
    print(f"输出目录: {config.OUTPUT_DIR} -> {output_dir}")
    if output_dir.is_absolute():
        print("✅ 输出目录是绝对路径")
    else:
        print("⚠️  输出目录是相对路径")
    
    # 验证日志文件
    log_file = Path(os.path.expanduser(config.LOG_FILE))
    print(f"日志文件: {config.LOG_FILE} -> {log_file}")
    if log_file.is_absolute():
        print("✅ 日志文件是绝对路径")
    else:
        print("⚠️  日志文件是相对路径")
    
    # 验证网络配置
    print(f"GitHub页面: {config.GITHUB_URL}")
    print(f"基础URL: {config.BASE_URL}")
    print(f"重试次数: {config.MAX_RETRIES}")
    print(f"请求超时: {config.REQUEST_TIMEOUT}秒")
    print(f"GitHub解析: {'启用' if config.PRIORITY_GITHUB_PARSE else '禁用'}")
    print(f"订阅数量: {config.SUBSCRIPTION_COUNT}")
    
    # 验证日志配置
    valid_log_levels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
    if config.LOG_LEVEL in valid_log_levels:
        print(f"✅ 日志级别: {config.LOG_LEVEL}")
    else:
        print(f"❌ 无效的日志级别: {config.LOG_LEVEL}")
        return False
    
    # 验证权限配置
    print(f"输出目录权限: {oct(config.OUTPUT_DIR_PERMISSIONS)}")
    print(f"日志文件权限: {oct(config.LOG_FILE_PERMISSIONS)}")
    
    # 验证验证配置
    print(f"内容验证: {'启用' if config.VALIDATE_CONTENT else '禁用'}")
    print(f"最小内容长度: {config.MIN_CONTENT_LENGTH}字符")
    
    print("\n=== 配置验证完成 ===")
    print("✅ 配置文件验证通过")
    return True

def test_directory_creation():
    """测试目录创建"""
    
    print("\n=== 目录创建测试 ===")
    
    try:
        import config
        
        # 测试输出目录创建
        output_path = Path(os.path.expanduser(config.OUTPUT_DIR))
        if not output_path.exists():
            output_path.mkdir(parents=True, exist_ok=True)
            print(f"✅ 成功创建输出目录: {output_path}")
        else:
            print(f"✅ 输出目录已存在: {output_path}")
        
        # 测试日志目录创建
        log_path = Path(os.path.expanduser(config.LOG_FILE))
        log_dir = log_path.parent
        if not log_dir.exists():
            log_dir.mkdir(parents=True, exist_ok=True)
            print(f"✅ 成功创建日志目录: {log_dir}")
        else:
            print(f"✅ 日志目录已存在: {log_dir}")
        
        # 测试日志文件创建
        if not log_path.exists():
            log_path.touch()
            print(f"✅ 成功创建日志文件: {log_path}")
        else:
            print(f"✅ 日志文件已存在: {log_path}")
            
    except Exception as e:
        print(f"❌ 目录创建测试失败: {e}")
        return False
    
    return True

def main():
    """主函数"""
    
    # 验证配置
    if not validate_config():
        sys.exit(1)
    
    # 测试目录创建
    if not test_directory_creation():
        sys.exit(1)
    
    print("\n🎉 所有验证通过！配置文件可以正常使用。")
    print("\n提示:")
    print("- 运行 'python3 proxy_fetcher.py' 测试脚本")
    print("- 运行 'python3 test_script.py' 进行完整测试")
    print("- 运行 'sudo ./install.sh' 进行安装")

if __name__ == "__main__":
    main()
